package muhnes.sizoo.dal;

import muhnes.sizoo.HibernateUtilSeguridad;
import muhnes.sizoo.modelo.Rol;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;

/**
 * Clase que implementa los metodos que se definieron en rolDao
 * @author  nelson chicas
 */
public class RolDaoImpl extends GenericoDAO< Rol, Integer > 
                        implements RolDao {
    
    public RolDaoImpl() {
        super( HibernateUtilSeguridad.getSessionFactory() );
    }

    @Override
    protected Class<?> getClaseEntidad () {
        return Rol.class;
    }

    /**
     * Metodo para verificar la unicidad de los roles 
     * 
     */
    @Override
    public boolean verificarUnicidad(Rol rol) {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Rol where codigorol != :codigo " + 
                     "and upper(nombre) = :nombre";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo", rol.getCodigorol());
        consulta.setParameter("nombre", rol.getNombre().toUpperCase());
        return consulta.uniqueResult() != null ? true : false;
    }
    
    /**
     * Metodo para verificar la dependencia de los roles con las demas entidades
     */
    @Override
    public boolean verificarDependencia (Rol entidad) {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Rol where codigorol = :codigo " +
                     "and size(usuarios) > 0";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo",entidad.getCodigorol());
        return !consulta.list().isEmpty();
    }
    
}
